﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DAL_NhaSach;
using BLL_NhaSach;
using System.Collections;
using System.Text.RegularExpressions;

namespace AppQlyNhaSach.KhachHang
{
    public partial class frmKhachHang : DevExpress.XtraEditors.XtraForm,IDataGrid
    {
        private KhachHangBLL khBLL;

        public frmKhachHang()
        {
            InitializeComponent();
        }

        private void frmKhachHang_Load(object sender, EventArgs e)
        {
            khBLL = new KhachHangBLL(Properties.Settings.Default.ConnectionStringUser);
            grdKhachHang.DataSource = khBLL.getAllData();
        }

        public System.Collections.ArrayList getRowsID()
        {
            ArrayList lst_id = new ArrayList();
            int[] ids = gridView1.GetSelectedRows();
            foreach (int i in ids)
            {
                int id = (Int32)gridView1.GetRowCellValue(i, "MaKH");
                lst_id.Add(id);
            }
            return lst_id;
        }

        private void gridView1_FocusedRowChanged(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventArgs e)
        {
            try
            {
                int id = int.Parse(gridView1.GetFocusedRowCellValue("MaKH").ToString());
                DAL_NhaSach.KhachHang kh = (DAL_NhaSach.KhachHang)khBLL.findObjects(id);
                if (kh != null)
                {
                    txtMaKH.Text = kh.MaKH.ToString();
                    txtTenKH.Text = kh.TenKH;
                    txtSDT.Text = kh.SoDienThoai;
                    txtCMND.Text = kh.SoCMND;
                    txtCongNo.Text = kh.CongNo.ToString();
                    txtDiaChi.Text = kh.DiaChi;
                    txtEmail.Text = kh.Email;
                    if (kh.GioiTinh)
                    {
                        cboGioiTinh.SelectedIndex = 0;
                    }
                    else cboGioiTinh.SelectedIndex = 1;
                }
            }
            catch { }
        }

        private void btnThem_Click(object sender, EventArgs e)
        {
            if (btnThem.Text.Equals("&Thêm"))
            {
                changeState(true);
                txtMaKH.Text = "";
                txtTenKH.Text = "";
                txtDiaChi.Text = "";
                txtSDT.Text = "";
                txtCMND.Text = "";
                txtEmail.Text = "";
                txtCongNo.Text = "";
                btnThem.Text = "Xác Nhận";
                btnHuy.Enabled = true;
            }
            else if (btnThem.Text.Equals("Xác Nhận"))
            {
                if (checkValid())
                {
                    DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn thêm khách hàng này?", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (r == DialogResult.Yes)
                    {
                        DAL_NhaSach.KhachHang kh = new DAL_NhaSach.KhachHang();
                        kh.TenKH = txtTenKH.Text;
                        kh.DiaChi = txtDiaChi.Text;
                        kh.Email = txtEmail.Text;
                        kh.SoCMND = txtCMND.Text;
                        kh.SoDienThoai = txtSDT.Text;
                        if (txtCongNo.Text != "")
                        {
                            kh.CongNo = decimal.Parse(txtCongNo.Text);
                        }
                        else kh.CongNo = 0;
                        if (cboGioiTinh.SelectedIndex == 0)
                            kh.GioiTinh = true;
                        else kh.GioiTinh = false;
                        if (khBLL.addObject(kh))
                        {
                            XtraMessageBox.Show("Thêm thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            changeState(false);
                            grdKhachHang.DataSource = khBLL.getAllData();
                            btnHuy.Enabled = false;
                            btnThem.Text = "&Thêm";
                        }
                        else
                            XtraMessageBox.Show("Thêm thất bại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                    }
                }
            }
            else
            {
                if (checkValid())
                {
                    DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn cập nhật lại thông tin khách hàng này không?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (r == DialogResult.Yes)
                    {
                        DAL_NhaSach.KhachHang kh = new DAL_NhaSach.KhachHang();
                        kh.MaKH = int.Parse(txtMaKH.Text);
                        kh.TenKH = txtTenKH.Text;
                        kh.SoCMND = txtCMND.Text;
                        kh.DiaChi = txtDiaChi.Text;
                        kh.Email = txtEmail.Text;
                        kh.CongNo = decimal.Parse(txtCongNo.Text);
                        kh.SoDienThoai = txtSDT.Text;
                        if (cboGioiTinh.SelectedIndex == 0)
                            kh.GioiTinh = true;
                        else kh.GioiTinh = false;
                        if (khBLL.updateObject(kh))
                        {
                            XtraMessageBox.Show("Cập nhật thành công", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            changeState(false);
                            btnHuy.Enabled = false;
                            btnThem.Text = "&Thêm";
                            grdKhachHang.Enabled = true;
                            grdKhachHang.DataSource = khBLL.getAllData();
                        }
                        else XtraMessageBox.Show("Cập nhật thất bại", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
            }
        }

        private void changeState(bool state)
        {
            if (state)
            {
                txtTenKH.Properties.ReadOnly = false;
                txtDiaChi.Properties.ReadOnly = false;
                txtSDT.Properties.ReadOnly = false;
                txtEmail.Properties.ReadOnly = false;
                txtCongNo.Properties.ReadOnly = false;
                txtCMND.Properties.ReadOnly = false;
                cboGioiTinh.Enabled = true;
                grdKhachHang.Enabled = false;
            }
            else
            {
                txtMaKH.Text = "";
                txtTenKH.Properties.ReadOnly = !false;
                txtDiaChi.Properties.ReadOnly = !false;
                txtSDT.Properties.ReadOnly = !false;
                txtEmail.Properties.ReadOnly = !false;
                txtCongNo.Properties.ReadOnly = !false;
                txtCMND.Properties.ReadOnly = !false;
                cboGioiTinh.Enabled = !true;
                grdKhachHang.Enabled = true;
            }
        }

        private bool checkValid()
        {
            String pCMND = @"^\d{9}$";
            String pEmail = @"^\w+@[a-z]+?\.[a-z]{2,3}$";
            String pSdt = @"^0\d{8,10}$";
            Regex rCMND = new Regex(pCMND);
            Regex rEmail = new Regex(pEmail);
            Regex rSdt = new Regex(pSdt);
            String nof = "";
            if (!rCMND.IsMatch(txtCMND.Text) && txtCMND.Text!="")
                nof += "Số CMND không hợp lệ !\n";
            if (!rEmail.IsMatch(txtEmail.Text) && txtEmail.Text!="")
                nof += "Địa chỉ email không hợp lệ !\n";
            if (!rSdt.IsMatch(txtSDT.Text) && txtSDT.Text!="")
                nof += "Số điện thoại không hợp lệ !";
            if (!nof.Equals(""))
            {
                XtraMessageBox.Show(nof, "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
            else return true;
        }

        private void btnHuy_Click(object sender, EventArgs e)
        {
            changeState(false);
            btnHuy.Enabled = false;
            btnThem.Text = "&Thêm";
            grdKhachHang.DataSource = khBLL.getAllData();
            grdKhachHang.Enabled = true;
        }

        private void toolStripMenuItem2_Click(object sender, EventArgs e)
        {
            DialogResult r = XtraMessageBox.Show("Bạn có chắc chắn muốn xóa khách hàng này không? Mọi thông tin liên quan sẽ bị xóa hết!!!", "Thông báo", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (r == DialogResult.Yes)
            {
                try
                {
                    ArrayList lst = getRowsID();
                    if (lst.Count > 0)
                    {
                        foreach (int id in lst)
                        {
                            khBLL.deleteObject(id);
                        }
                        XtraMessageBox.Show("Xóa thành công");
                        grdKhachHang.DataSource = khBLL.getAllData();
                    }
                    else XtraMessageBox.Show("Phải chọn khách hàng cần xóa");
                }
                catch
                {
                    XtraMessageBox.Show("Lỗi trong khi xóa");
                }
            }
        }

        private void SuatoolStripMenuItem1_Click(object sender, EventArgs e)
        {
            changeState(true);
            btnThem.Text = "Cập Nhật";
            btnHuy.Enabled = true;
            grdKhachHang.Enabled = false;
        }

        private void frmKhachHang_FormClosing(object sender, FormClosingEventArgs e)
        {
            frmMainNS.isKhachHang = false;
        }
    }
}